# версия синтаксиса
version: '3.8'

# в этом блоке мы описываем контейнеры, которые будут запускаться
services:
  #Контейнер с PHP, назовём его app
  app:
    # Если нет секции build, то система будет искать образ в репозиториях
    build:
      context: ./fpm
      dockerfile: Dockerfile
      args:
        - INSTALL_XDEBUG=${INSTALL_XDEBUG}
    image: myapp/php # имя будущего образа
    container_name: app # имя контейнера после запуска
    restart: always # перезагружать после падения - всегда
    environment:
      PHP_IDE_CONFIG: "serverName=Docker"
    volumes:
      - ./app/backend:/data/messenger.local
      - ./fpm/php.ini:/usr/local/etc/php/conf.d/local.ini
    # мы можем создать для контейнеров внутреннюю сеть
    networks:
      - app-network

  # контейнер с Node
  client:
    container_name: client
    restart: always
    build:
      context: ./app/frontend
      dockerfile: Dockerfile
    ports:
      - "3000:3000"
    volumes:
      - ./app/frontend:/data/messenger.client
    networks:
      - app-network

  #контейнер с Nginx
  webserver:
    build:
      context: ./nginx
      dockerfile: Dockerfile
    image: myapp/nginx
    restart: always # перезагружать после падения - всегда
    depends_on:  # завист от включенного php
      - app
      - client
    container_name: webserver
    volumes:
      - ./app/backend:/data/messenger.local
      - ./app/frontend:/data/messenger.client

    # проброс портов
    ports:
      - "80:80"
      - "443:443"
    networks:
      - app-network

  # контейнер с MySQL
  # строим на базе стандартного образа
  database:
    platform: linux/x86_64
    image: mysql:8
    command: --default-authentication-plugin=mysql_native_password
    container_name: database
    restart: always # перезагружать после падения - всегда
    ports:
      - "3306:3306"
    # описываем, какую БД мы создаём
    environment:
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
    volumes:
      - ./dbdata:/var/lib/mysql
      - ./mysql/my.cnf:/etc/mysql/my.cnf
    networks:
      - app-network

  # контейнер с тестовой бд MySQL
  # строим на базе стандартного образа
  database-container-test:
    platform: linux/x86_64
    image: mysql:8
    command: --default-authentication-plugin=mysql_native_password
    container_name: database-test
    restart: always # перезагружать после падения - всегда
    ports:
      - "4306:3306"
    # описываем, какую БД мы создаём
    environment:
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
    volumes:
      - ./dbdata-test:/var/lib/mysql
      - ./mysql/my.cnf:/etc/mysql/my.cnf
    networks:
      - app-network

  # контейнер с PhpMyAdmin
  # строим на базе стандартного образа
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    restart: always # перезагружать после падения - всегда
    container_name: phpmyadmin
    depends_on: # завист от включенного php и mysql и nginx
      - app
      - database
      - webserver
    environment:
      - PMA_ARBITRARY=1
      - PMA_HOST=database
      - PMA_PORT=3306
    ports:
      - "81:80"
    networks:
      - app-network

  # контейнер с MailHog
  mailhog:
    container_name: mailhog
    image: mailhog/mailhog
    restart: always
    logging:
      driver: "none"
    ports:
      - "8025:8025"
      - "1025:1025"
    networks:
      - app-network

#Docker Networks
networks:
  app-network:
    driver: bridge